package com.hy.Three389;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:统计以给定字符开头和结尾的子字符串总数
 *
 * 给你一个字符串 s 和一个字符 c 。返回在字符串 s 中并且以 c 字符开头和结尾的非空子字符串的总数。
 *
 * 示例 1：
 * 输入：s = "abada", c = "a"
 * 输出：6
 * 解释：以 "a" 开头和结尾的子字符串有： "abada"、"abada"、"abada"、"abada"、"abada"、"abada"。
 *
 * 示例 2：
 * 输入：s = "zzz", c = "z"
 * 输出：6
 * 解释：字符串 s 中总共有 6 个子字符串，并且它们都以 "z" 开头和结尾。
 *
 * 提示：
 * 1 <= s.length <= 105
 * s 和 c 均由小写英文字母组成。
 *
 * User:Mr.Du
 * Date:2024/3/17
 * Time:10:50
 */
public class CountSubstrings {
    /**
     * 优雅代码
     * @param s
     * @param c
     * @return
     */
    public long countSubstrings(String s, char c) {
        int[] nums = new int[26];
        int res = 0, ans = 0;
        for(int i = 0;i < s.length();i++){
            if(s.charAt(i) == c){
                ans++;
                res += ans;
            }
        }
        return res;
    }
    /**
     * 找规律题
     * 1 1
     * 2 3
     * 3 6
     * 4 10
     * know？
     * @param s
     * @param c
     * @return
     */
    public long countSubstrings1(String s, char c) {
        int[] nums = new int[26];
        for(int i = 0;i < s.length();i++){
            nums[s.charAt(i) - 'a']++;
        }
        int aa = nums[c - 'a'];
        if(aa < 2) return aa;
        return grid(aa);
    }
    public long grid(int c){
        long res = 0, pre = 1;
        for(int i = 2;i <= c;i++){
            res = pre + i;
            pre = res;
        }
        return res;
    }


}
